home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 2
/
AACD 2.iso
/
AACD
/
Magazine
/
GraphicsCards
/
StormMesa
/
src
/
scissor.s
< prev
next >
Wrap
Text File
|
1999-02-04
|
4KB
|
244 lines
; Storm C Compiler
; Work2:Mesa3/Mesa-3.0/src/scissor.c
mc68030
mc68881
XREF _gl_error
XREF _CC
SECTION "_gl_Scissor:0",CODE
;void gl_Scissor( GLcontext *ctx,
XDEF _gl_Scissor
_gl_Scissor
movem.l d2-d4,-(a7)
move.l $20(a7),d0
move.l $1C(a7),d1
move.l $18(a7),d3
move.l $14(a7),d4
move.l $10(a7),a0
L17
; if (width<0 || height<0)
tst.l d1
bmi.b L19
L18
tst.l d0
bpl.b L20
L19
; gl_error( ctx, GL_INVALID_VALUE, "glScissor" );
move.l #L15,-(a7)
pea $501.w
move.l a0,-(a7)
jsr _gl_error
add.w #$C,a7
movem.l (a7)+,d2-d4
rts
L20
; if (INSIDE_BEGIN_END(ctx))
move.l a0,a1
add.l #$E968,a1
move.l (a1),d2
cmp.l #$1A00,d2
beq.b L22
L21
; gl_error( ctx, GL_INVALID_OPERATION, "glBegin" );
move.l #L16,-(a7)
pea $502.w
move.l a0,-(a7)
jsr _gl_error
add.w #$C,a7
movem.l (a7)+,d2-d4
rts
L22
; if (x!=ctx->Scissor.X || y!=ctx->Scissor.Y ||
move.l a0,a1
add.l #$DE92,a1
cmp.l 2(a1),d4
bne.b L26
L23
move.l a0,a1
add.l #$DE92,a1
cmp.l 6(a1),d3
bne.b L26
L24
move.l a0,a1
add.l #$DE92,a1
cmp.l $A(a1),d1
bne.b L26
L25
move.l a0,a1
add.l #$DE92,a1
cmp.l $E(a1),d0
beq.b L27
L26
; ctx->Scissor.X = x;
move.l a0,a1
add.l #$DE94,a1
move.l d4,(a1)
; ctx->Scissor.Y = y;
move.l a0,a1
add.l #$DE98,a1
move.l d3,(a1)
; ctx->Scissor.Width = width;
move.l a0,a1
add.l #$DE9C,a1
move.l d1,(a1)
; ctx->Scissor.Height = height;
move.l a0,a1
add.l #$DEA0,a1
move.l d0,(a1)
; ctx->NewState |= NEW_ALL;
move.l a0,a1
add.l #$E960,a1
move.l (a1),d0
or.l #$FF,d0
add.l #$E960,a0
move.l d0,(a0)
L27
movem.l (a7)+,d2-d4
rts
L16
dc.b 'glBegin',0
L15
dc.b 'glScissor',0
SECTION "_gl_scissor_span:0",CODE
rts
;GLint gl_scissor_span( GLcontext *ctx,
XDEF _gl_scissor_span
_gl_scissor_span
movem.l d2-d6/a2,-(a7)
movem.l $24(a7),d1/d2/a1
move.l $20(a7),d5
move.l $1C(a7),a0
L28
; if (y<ctx->Buffer->Ymin || y>ctx->Buffer->Ymax
move.l $8FC(a0),a2
cmp.l $2C(a2),d2
blt.b L32
L29
move.l $8FC(a0),a2
cmp.l $30(a2),d2
bgt.b L32
L30
move.l $8FC(a0),a2
cmp.l $28(a2),d1
bgt.b L32
L31
move.l d1,d0
add.l d5,d0
subq.l #1,d0
move.l $8FC(a0),a2
cmp.l $24(a2),d0
bge.b L33
L32
moveq #0,d0
movem.l (a7)+,d2-d6/a2
rts
L33
; GLint xMin = ctx->Buffer->Xmin;
move.l $8FC(a0),a2
move.l $24(a2),d4
; GLint xMax = ctx->Buffer->Xmax;
move.l $8FC(a0),a0
move.l $28(a0),d3
; for (i=0;
moveq #0,d0
bra.b L35
L34
; mask[i] = 0;
clr.b 0(a1,d0.l)
addq.l #1,d0
L35
move.l d1,d2
add.l d0,d2
cmp.l d4,d2
blt.b L34
L36
; for (i=(GLint)n-1;
move.l d5,d0
subq.l #1,d0
bra.b L38
L37
; mask[i] = 0;
clr.b 0(a1,d0.l)
subq.l #1,d0
L38
move.l d1,d2
add.l d0,d2
cmp.l d3,d2
bgt.b L37
L39
moveq #1,d0
movem.l (a7)+,d2-d6/a2
rts
SECTION "_gl_scissor_pixels:0",CODE
;GLuint gl_scissor_pixels( GLcontext *ctx,
XDEF _gl_scissor_pixels
_gl_scissor_pixels
L44 EQU -$14
link a5,#L44
movem.l d2-d7/a2-a4,-(a7)
move.l $8(a5),a0
move.l $14(a5),a1
move.l $10(a5),a2
move.l $18(a5),a4
L40
; GLint xmin = ctx->Buffer->Xmin;
move.l $8FC(a0),a3
move.l $24(a3),d7
; GLint xmax = ctx->Buffer->Xmax;
move.l $8FC(a0),a3
move.l $28(a3),d5
; GLint ymin = ctx->Buffer->Ymin;
move.l $8FC(a0),a3
move.l $2C(a3),d4
; GLint ymax = ctx->Buffer->Ymax;
move.l $8FC(a0),a0
move.l $30(a0),d3
; for (i=0;
moveq #0,d1
bra.b L42
L41
; mask[i] &= (x[i]>=xmin) & (x[i]<=xmax) & (y[i]>=ymin) &
move.l 0(a2,d1.l*4),d0
cmp.l d7,d0
sge d0
and.l #1,d0
move.l 0(a2,d1.l*4),d2
cmp.l d5,d2
sle d2
and.l #1,d2
and.l d2,d0
move.l 0(a1,d1.l*4),d2
cmp.l d4,d2
sge d2
and.l #1,d2
and.l d2,d0
move.l 0(a1,d1.l*4),d2
cmp.l d3,d2
sle d2
and.l #1,d2
and.l d2,d0
move.b d0,d2
lea 0(a4,d1.l),a0
and.b d2,(a0)
addq.l #1,d1
L42
cmp.l $C(a5),d1
blo.b L41
L43
moveq #1,d0
movem.l (a7)+,d2-d7/a2-a4
unlk a5
rts
END